#ifndef OCL_SL_H
#define OCL_SL_H

#ifdef __APPLE__
    #include <OpenCL/opencl.h>
#endif

#ifdef _WIN32
	#include <CL/cl.h>
	#pragma comment(lib, "opencl.lib")
#endif

#if defined(__linux) || defined(linux) || defined(__linux__)
    #include <CL/cl.h>
#endif

#define oclGetPlatformIDs(p1,p2,p3)            \
         clGetPlatformIDs(p1,p2,p3)
#define oclGetPlatformInfo(p1,p2,p3,p4,p5)     \
         clGetPlatformInfo(p1,p2,p3,p4,p5)
#define oclGetDeviceIDs(p1,p2,p3,p4,p5)        \
         clGetDeviceIDs(p1,p2,p3,p4,p5)
#define oclGetDeviceInfo(p1,p2,p3,p4,p5)       \
         clGetDeviceInfo(p1,p2,p3,p4,p5)
#define oclCreateContext(p1,p2,p3,p4,p5,p6)    \
         clCreateContext(p1,p2,p3,p4,p5,p6)
#define oclReleaseContext(p1)                  \
         clReleaseContext(p1)
#define oclCreateCommandQueue(p1,p2,p3,p4)     \
         clCreateCommandQueue(p1,p2,p3,p4)
#define oclReleaseCommandQueue(p1)             \
         clReleaseCommandQueue(p1)
#define oclRetainKernel(p1)                    \
         clRetainKernel(p1)
#define oclReleaseKernel(p1)                   \
         clReleaseKernel(p1)
#define oclSetKernelArg(p1,p2,p3,p4)           \
         clSetKernelArg(p1,p2,p3,p4)
#define oclEnqueueNDRangeKernel(p1,p2,p3,p4,p5,p6,p7,p8,p9)        \
         clEnqueueNDRangeKernel(p1,p2,p3,p4,p5,p6,p7,p8,p9)
#define oclCreateProgramWithSource(p1,p2,p3,p4,p5)                 \
         clCreateProgramWithSource(p1,p2,p3,p4,p5)
#define oclBuildProgram(p1,p2,p3,p4,p5,p6)                         \
         clBuildProgram(p1,p2,p3,p4,p5,p6)
#define oclGetProgramBuildInfo(p1,p2,p3,p4,p5,p6)                  \
         clGetProgramBuildInfo(p1,p2,p3,p4,p5,p6)
#define oclCreateKernelsInProgram(p1,p2,p3,p4)                     \
         clCreateKernelsInProgram(p1,p2,p3,p4)
#define oclGetKernelInfo(p1,p2,p3,p4,p5)                           \
         clGetKernelInfo(p1,p2,p3,p4,p5)
#define oclGetKernelWorkGroupInfo(p1,p2,p3,p4,p5,p6)               \
         clGetKernelWorkGroupInfo(p1,p2,p3,p4,p5,p6)
#define oclReleaseProgram(p1)                                      \
         clReleaseProgram(p1)
#define oclCreateBuffer(p1,p2,p3,p4,p5)                            \
         clCreateBuffer(p1,p2,p3,p4,p5)
#define oclEnqueueReadBuffer(p1,p2,p3,p4,p5,p6,p7,p8,p9)           \
         clEnqueueReadBuffer(p1,p2,p3,p4,p5,p6,p7,p8,p9)
#define oclEnqueueMapBuffer(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10)        \
         clEnqueueMapBuffer(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10)
#define oclEnqueueUnmapMemObject(p1,p2,p3,p4,p5,p6)                \
         clEnqueueUnmapMemObject(p1,p2,p3,p4,p5,p6)
#define oclCreateImage2D(p1,p2,p3,p4,p5,p6,p7,p8)                  \
         clCreateImage2D(p1,p2,p3,p4,p5,p6,p7,p8)
#define oclEnqueueReadImage(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,a1)     \
         clEnqueueReadImage(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,a1)
#define oclEnqueueMapImage(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,a1,a2)   \
         clEnqueueMapImage(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,a1,a2)
#define oclRetainMemObject(p1)                                     \
         clRetainMemObject(p1)
#define oclReleaseMemObject(p1)                                    \
         clReleaseMemObject(p1)
#define oclWaitForEvents(p1,p2)                                    \
         clWaitForEvents(p1,p2)
#define oclGetEventProfilingInfo(p1,p2,p3,p4,p5)                   \
         clGetEventProfilingInfo(p1,p2,p3,p4,p5)
#define oclReleaseEvent(p1)                                        \
         clReleaseEvent(p1)
#endif